package mkt.classes.DAO;


import java.util.List;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import mkt.classes.bean.Avaliacao;


/**
 *
 * @author Claudio Leite
 */
public class AvaliacaoDAO {

    private Connection conexao;

    public AvaliacaoDAO(Connection conexao) {
        this.conexao = conexao;
    }

    public void create(Avaliacao ava) throws SQLException {
        if (this.valida(ava)) {
            String sql = "INSERT INTO AVALIACAO (NOTA,CODUSUARIO,CODLIVRO) VALUES (?,?,?)";

            PreparedStatement pst = this.conexao.prepareStatement(sql);
            pst.setInt(1, ava.nota);
            pst.setInt(2, ava.codUsuario);
            pst.setInt(3, ava.codLivro);
            pst.executeUpdate();
            Statement st = this.conexao.createStatement();
                        
            ResultSet rs = st.executeQuery("SELECT CURRVAL ('SEQAVALIACAO')");
                        
            if (rs.next()) {
                ava.setCod(rs.getInt(1));
            }
            rs.close();
            st.close();
            pst.close();
        }
    }

    public Avaliacao retrieve(Avaliacao ava) throws SQLException {
        Avaliacao avaRet = null;
        String sql = "SELECT NOTA,CODUSUARIO,CODLIVRO FROM AVALIACAO WHERE COD=?";
        PreparedStatement pst = this.conexao.prepareStatement(sql);
        pst.setInt(1, ava.getCod());
        ResultSet rs = pst.executeQuery();
        if (rs.next()) {
            avaRet = new Avaliacao();
            avaRet.setCod(rs.getInt("COD"));
            avaRet.setNota(rs.getInt("NOTA"));
            avaRet.setCodUsuario(rs.getInt("CODUSUARIO"));
            avaRet.setCodLivro(rs.getInt("CODLIVRO"));
        }
        rs.close();
        pst.close();
        return avaRet;
    }

    public void update(Avaliacao ava) throws SQLException {
        if (this.valida(ava)) {
            String sql = "UPDATE AVALIACAO SET NOTA=? , CODUSUARIO=? , CODLIVRO=? WHERE COD=?";
            PreparedStatement pst = this.conexao.prepareStatement(sql);
            pst.setInt(1, ava.getNota());
            pst.setInt(2, ava.getCodUsuario());
            pst.setInt(3, ava.getCodLivro());
            pst.setInt(4, ava.getCod());
            pst.executeUpdate();
            pst.close();
        }
    }

    public void delete(Avaliacao ava) throws SQLException {
        String sql = "DELETE FROM AVALIACAO WHERE COD=?";
        PreparedStatement pst = this.conexao.prepareStatement(sql);
        pst.setInt(1, ava.getCod());
        pst.executeUpdate();
        pst.close();
    }

    public List<Avaliacao> listaTodos() throws SQLException {
        List<Avaliacao> lista = new ArrayList<Avaliacao>();
        String sql = "SELECT COD, NOTA, CODUSUARIO, CODLIVRO FROM AVALIACAO ORDER BY COD";
        Statement st = this.conexao.createStatement();
        ResultSet rs = st.executeQuery(sql);
        
        while (rs.next()) {
            Avaliacao ava = new Avaliacao(rs.getInt("COD"),rs.getInt("NOTA"), rs.getInt("CODUSUARIO"), rs.getInt("CODLIVRO"));
            lista.add(ava);
        }
        rs.close();
        st.close();
        return lista;
    }

    public boolean valida(Avaliacao ava) {
        boolean ret = false;
        if (ava != null) {
            ret = true;
        }
        return ret;
    }
    
}
